// 路由放行规则
import router from '@/router/index'
import store from '@/store/index'
import { Message } from 'element-ui'

// 路由守卫
router.beforeEach(async(to, from, next) => {
  const { token, username } = store.getters // 登录状态
  const { path } = to // 当前页面
  const whiteList = ['/login', '/404'] // 白名单
  const isWhite = whiteList.indexOf(path) !== -1 // 是否在白名单

  // 已登录
  if (token) {
    // 获取用户信息
    if (!username) {
      await store.dispatch('user/GET_USER_INFO')
      const asyncRoutes = await store.dispatch('permission/filtersRoute')
      router.addRoutes([
        ...asyncRoutes,
        { path: '*', redirect: '/404', hidden: true }
      ])
      return next(path)
    }
    // 不允许访问登录页
    if (path === '/login') {
      Message.success('已登录，直接进入首页')
      console.log('已登录，直接进入首页')
      return next('/')
    }
    // 其他页面
    return next()
  } else {
    // 未登录
    // 黑名单
    if (!isWhite) {
      Message.warning('未登录，请先登录')
      console.log('未登录，扔去登录页')
      return next('/login')
    }
    // 白名单
    return next()
  }
})

// import router from './router'
// import store from './store'
// import {
//   Message
// } from 'element-ui'
// import NProgress from 'nprogress' // progress bar
// import 'nprogress/nprogress.css' // progress bar style
// import {
//   getToken
// } from '@/utils/auth' // get token from cookie
// import getPageTitle from '@/utils/get-page-title'

// NProgress.configure( {
//   showSpinner: false
// } ) // NProgress Configuration

// const whiteList = [ '/login' ] // no redirect whitelist

// router.beforeEach( async ( to, from, next ) => {
//   // start progress bar
//   NProgress.start()

//   // set page title
//   document.title = getPageTitle( to.meta.title )

//   // determine whether the user has logged in
//   const hasToken = getToken()

//   if ( hasToken ) {
//     if ( to.path === '/login' ) {
//       // if is logged in, redirect to the home page
//       next( {
//         path: '/'
//       } )
//       NProgress.done()
//     } else {
//       const hasGetUserInfo = store.getters.name
//       if ( hasGetUserInfo ) {
//         next()
//       } else {
//         try {
//           // get user info
//           await store.dispatch( 'user/getInfo' )

//           next()
//         } catch ( error ) {
//           // remove token and go to login page to re-login
//           await store.dispatch( 'user/resetToken' )
//           Message.error( error || 'Has Error' )
//           next( `/login?redirect=${to.path}` )
//           NProgress.done()
//         }
//       }
//     }
//   } else {
//     /* has no token*/

//     if ( whiteList.indexOf( to.path ) !== -1 ) {
//       // in the free login whitelist, go directly
//       next()
//     } else {
//       // other pages that do not have permission to access are redirected to the login page.
//       next( `/login?redirect=${to.path}` )
//       NProgress.done()
//     }
//   }
// } )

// router.afterEach( () => {
//   // finish progress bar
//   NProgress.done()
// } )
